﻿namespace HanoiTower
{
    internal class Program
    {
        /// <summary>
        /// 把汉诺塔从A柱放到B柱需要怎么操作，多少步
        /// </summary>
        //最大层数
        const int MaxLevel = 10;
        //记录移动次数
        public static  int Steps = 0;
        static void Main(string[] args)
        {
            Console.WriteLine($"请输入盘子的层数(1~{MaxLevel}):");
            //输入的字符串必须是数字并且不能超出 int 类型的取值范围
            //语法形式：数据类型 变量 = 数据类型.Parse(字符串类型的值);
            int level = int.Parse(Console.ReadLine());
            move(level, 'A', 'B' , 'C') ;
            Console.WriteLine($"移动次数为{Steps}");
            Console.ReadKey();
        }
        static void move(int n, char a , char b , char c )
        {
            //如果只有一层，直接从A到B
            if (n == 1)
            {
                Console.WriteLine($"移动第{n}个从{a}到{b}");
                Steps++;
            }
            else
            {
                //n-1个从A经B进入C号箱子
                move(n - 1, a, c, b);
                //第n个从A进入B
                Console.WriteLine($"移动第{n}个从{a}到{b}");
                //n-1个一起从C到B
                Console.WriteLine($"移动{n - 1}个从{c}到{b}");
                Steps += 3;
            }

        }

    }
}